package org.jeecg.modules.demo.ch.controller;

import lombok.Data;
import org.jeecg.modules.demo.ch.entity.ExcelObject;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Copyright (C) XXXXXXXXXXX科技股份技有限公司
 * @Author: lidongping
 * @Date: 2021-08-20 10:23
 * @Description: <p>
 * 合并单元格的方法：
 * 指定 4 个参数，起始行，结束行，起始列，结束列。然后这个区域将被合并。
 * CellRangeAddress region01 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 0, 0);
 * sheet.addMergedRegion(region01);
 * </p>
 */
public class TestExcel01 {
    //public static void main(String[] args) throws IOException {
//        // 定义excel表格
//        HSSFWorkbook workbook = new HSSFWorkbook();
//        HSSFCellStyle style = workbook.createCellStyle();
//        HSSFSheet sheet = workbook.createSheet("周明细");
//        CellRangeAddress regionx = new CellRangeAddress(0, 0, 0, 5);
//        sheet.addMergedRegion(regionx);
//        // 表头数据
//        List<String> title = new ArrayList<String>();
//        title.add("序号");
//        title.add("部门");
//        title.add("小组");
//        title.add("小组II");
//        title.add("事务"); // 3行
//        title.add("具体事项"); // 5行
//        // 第一行 标题
//        HSSFRow row0 = sheet.createRow(0);
//        HSSFCell cell_00 = row0.createCell(0);
//        cell_00.setCellValue("周计划");
//        cell_00.setCellStyle(style);
//
//        // 第二行 表头设置
//        HSSFRow row1 = sheet.createRow(1);
//        for (int i = 0; i < title.size(); i++) {
//            String s = title.get(i);
//            HSSFCell cell = row1.createCell(i);
//            cell.setCellValue(s);
//        }
//        // 表行数据 第三行开头
//        List<ExcelObject> dataList = createData();
//        int rowNum = 2;
//        for (int i = 0; i < dataList.size(); i++) {
//            // 创建行
//            ExcelObject excelObject = dataList.get(i);
//            Integer rowNumTaskDeatil = excelObject.getTaskDeatil().size();
//            for (int j = 0; j < rowNumTaskDeatil; j++) {
//                HSSFRow row = sheet.createRow(rowNum);
//                // 填充列数据
//                HSSFCell cell0 = row.createCell(0);
//                HSSFCell cell1 = row.createCell(1);
//                HSSFCell cell2 = row.createCell(2);
//                HSSFCell cell3 = row.createCell(3);
//                HSSFCell cellTAsk4 = row.createCell(4);
//                HSSFCell cellTAskDetail5 = row.createCell(5);
//                if (j == 0) {
//                    cell0.setCellValue(excelObject.getNum());
//                    cell1.setCellValue(excelObject.getDepartmentName());
//                    cell2.setCellValue(excelObject.getGroupName());
//                    cell3.setCellValue(excelObject.getSubGroupName());
//                }
//                //事务设置  创建多行用于合并使用
//                if (j < excelObject.getTask().size()) {
//                    cellTAsk4.setCellValue(excelObject.getTask().get(j));
//                }
//                // 设置事项明细
//                cellTAskDetail5.setCellValue(excelObject.getTaskDeatil().get(j));
//                rowNum = rowNum + 1;
//            }
//            // 合并 序号
//            CellRangeAddress region01 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 0, 0);
//            sheet.addMergedRegion(region01);
//            // 合并 部门
//            CellRangeAddress region02 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 1, 1);
//            sheet.addMergedRegion(region02);
//            // 合并 小组
//            CellRangeAddress region03 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 2, 2);
//            sheet.addMergedRegion(region03);
//            // 合并 小组2
//            CellRangeAddress region04 = new CellRangeAddress(i * 5 + 2, i * 5 + 6, 3, 3);
//            sheet.addMergedRegion(region04);
//
//            // 合并事务
//            CellRangeAddress region05 = new CellRangeAddress(i * 5 + 4, i * 5 + 6, 4, 4);
//            sheet.addMergedRegion(region05);
//        }
//        // 文件输出
//        String fileName = "D:\\excelTest\\周计划测试-" + System.currentTimeMillis() + ".xls";
//        File file = new File(fileName);
//        FileOutputStream fout = new FileOutputStream(file);
//        workbook.write(fout);
//        fout.close();
//        System.out.println("导出完成fileName=" + fileName);
    //  }

    public static void main(String[] args) {
        String[] arr1 = { "a", "b", "c", "d" };
        String[] arr2 = { "d", "e", "f", "g" };

        Stream<String> stream1 = Stream.of(arr1);
        Stream<String> stream2 = Stream.of(arr2);
        // concat:合并两个流 distinct：去重
        List<String> newList = Stream.concat(stream1, stream2).distinct().collect(Collectors.toList());
        // limit：限制从流中获得前n个数据
        List<Integer> collect = Stream.iterate(1, x -> x + 2).limit(10).collect(Collectors.toList());
        // skip：跳过前n个数据 iterate()第一个参数 是初始值
        List<Integer> collect2 = Stream.iterate(1, x -> x + 2).skip(1).limit(5).collect(Collectors.toList());

        System.out.println("流合并：" + newList);//流合并：[a, b, c, d, e, f, g]
        System.out.println("limit：" + collect);//limit：[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
        System.out.println("skip：" + collect2);//skip：[3, 5, 7, 9, 11]

    }



@Data
static class PersonOne {
    private String name; // 姓名
    private int salary; // 薪资
    private int age; // 年龄
    private String sex; //性别
    private String area; // 地区

    // 构造方法
    public PersonOne(String name, int salary, int age, String sex, String area) {
        this.name = name;
        this.salary = salary;
        this.age = age;
        this.sex = sex;
        this.area = area;
    }
    public PersonOne() {
    }

}


    /**
     * 模拟数据 10行
     *
     * @return
     */
    private static List<ExcelObject> createData() {
        List<ExcelObject> dataList = new ArrayList<ExcelObject>();
        for (int i = 0; i < 10; i++) {
            int num = i + 1;
            ExcelObject rowList = new ExcelObject();
            rowList.setNum(num);
            rowList.setDepartmentName("部门-" + num);
            rowList.setGroupName("小组-" + num);
            rowList.setSubGroupName("小组II-" + num);
            rowList.setTask(createData03(num));
            rowList.setTaskDeatil(createData05(num));
            dataList.add(rowList);
        }
        return dataList;
    }

    /**
     * 创建三个子项,用于事务
     */
    private static List<String> createData03(Integer num) {
        List<String> list = new ArrayList<String>(3);
        for (int i = 1; i <= 3; i++) {
            list.add(num + "-事务子项-" + i);
        }
        return list;
    }

    /**
     * 创建5个子项,用于具体事项
     */
    private static List<String> createData05(Integer num) {
        List<String> list = new ArrayList<String>(3);
        for (int i = 1; i <= 5; i++) {
            list.add(num + "-具体事子项-" + i);
        }
        return list;
    }


}
